package day12;

import java.io.*;

/**
 * @author Xiao
 * @date 2021/8/3
 */
public class Test03 {
    /**
     * 3. 尝试用代码完成文件夹的复制（题目有点难，注意：不能直接使用IO流复制文件夹，IO流只能复制文件）
     */
    public static void main(String[] args) throws IOException {
        //给定一个源文件夹的路径和一个新文件夹的路径并创建对象
        File file1 = new File("homework\\src\\day12\\file03a");
        File file2 = new File("homework\\src\\day12\\file03b");
        //定义一个方法拷贝源文件夹的内容到新文件夹，参数为源文件夹和新文件夹对象
        copyDir(file1, file2);
    }

    private static void copyDir(File file1, File file2) throws IOException {
        //新文件夹对象调用mkdirs()方法，创建要拷贝的新文件夹
        file2.mkdirs();
        //获取源文件夹和新文件夹的路径
        String s1 = file1.getPath();
        String s2 = file2.getPath();
        //调用listFiles()方法获取源文件夹中的文件或者文件夹
        File[] files = file1.listFiles();
        //递归出口：如果无法继续从源文件夹中获取文件或者文件夹，则判定该文件夹的拷贝已完成
        if (files != null) {
            //遍历文件夹，获取其中的文件或文件夹
            for (File file : files) {
                //如果为文件，使用IO流拷贝该文件
                if (file.isFile()) {
                    //获取要读写的文件路径
                   /* File file3 = new File(s1 + "\\" + file.getName());
                    File file4 = new File(s2 + "\\" + file.getName());*/
                    File file3 = new File(s1, file.getName());
                    File file4 = new File(s2, file.getName());
                    //通过缓冲IO流读写文件
                    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file3));
                    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file4));
                    int i;
                    while ((i = bis.read()) != -1) {
                        bos.write(i);
                    }
                    bis.close();
                    bos.close();
                //如果为文件夹，递归
                } else {
                    copyDir(new File(s1, file.getName()),new File(s2, file.getName()));
                }
            }
        }
    }
}
